home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / popscren.arc / POPSCREN.PAS < prev    next >
Pascal/Delphi Source File  |  1985-09-10  |  6KB  |  167 lines

  1. {@@@@@@@@@@@ copyright (C) 1984 by Neil J. Rubenking @@@@@@@@@@@@@@@@@@@@@@@@
  2.  
  3.     A variable type is declared in SCREENS.TYP that is the same "shape"
  4.     as the (text) screen memory.  Using the "absolute" clause we
  5.     can define variables "MONO" and "COLO" that exist "on top of" the
  6.     Monochrome and Color screen memories.  If we then switch in some
  7.     other SCREEN variable (e.g., "Mono := new_screen"), the whole
  8.     video display changes instantly.
  9.  
  10.     The procedure MAKESCREEN takes a line of text and converts it into
  11.     one line of a screen variable.  You can get a screen into memory by
  12.     reading it from a file (see GetScreensFromFile below), by using
  13.     MAKESCREEN on text constants (see CreateAScreen below), or by
  14.     "grabbing" it from the screen memory itself (see GrabScreen below).
  15.  
  16.     One possible application for this sort of screen manipulation is
  17.     a POP-out menu.  Your program can "grab" the current screen, write
  18.     the menu onto the display, and then restore the screen.
  19. }
  20.  
  21. {$I screens.typ}
  22. {$I popscren.lib}
  23. {$I monitor.lib}
  24. {$I getkeys.lib}
  25. {$I grfxtabl.lib}
  26. {$I titles.lib}
  27.  
  28. var
  29.   Pops    : array[1..5] of screen;
  30.   N, M    : byte;
  31.   PopFile : text;
  32.   OneLine : lineType;
  33.   C, D    : char;
  34.   Your_title : title_type;
  35.  
  36. {@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
  37. procedure GetScreensFromFile;
  38. {This is one way to put screens into memory}
  39.  
  40. begin
  41.   Assign(PopFile,'POPSCREN.DAT');
  42.   reset(PopFile);
  43.   N := 0;
  44.   while (not EOF(PopFile)) and (N < 25) do
  45.     begin
  46.       N := N + 1;
  47.       readLn(PopFile,OneLine);
  48.       MakeScreen(Pops[1][N],15,OneLine);
  49.       MakeScreen(Pops[2][N],112,OneLine);
  50.       MakeScreen(Pops[3][N],1,OneLine);
  51.     end;
  52.   close(PopFile);
  53. end;
  54. {@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
  55. procedure CreateAScreen;
  56.    {This is another way to create a screen}
  57.  
  58. begin
  59. MakeScreen(Pops[4][1],15,'');
  60. MakeScreen(Pops[4][2],15,'');
  61. MakeScreen(Pops[4][3],15,'');
  62. MakeScreen(Pops[4][4],15,'');
  63. MakeScreen(Pops[4][5],15,
  64. 'THIS SCREEN WAS NOT READ FROM THAT FILE.');
  65. MakeScreen(Pops[4][6],15,
  66. '  THIS SCREEN WAS NOT READ FROM THAT FILE.');
  67. MakeScreen(Pops[4][7],15,
  68. '     THIS SCREEN WAS NOT READ FROM THAT FILE.');
  69. MakeScreen(Pops[4][8],15,
  70. '        THIS SCREEN WAS NOT READ FROM THAT FILE.');
  71. MakeScreen(Pops[4][9],15,
  72. '           THIS SCREEN WAS NOT READ FROM THAT FILE.');
  73. MakeScreen(Pops[4][10],15,
  74. '              THIS SCREEN WAS NOT READ FROM THAT FILE.');
  75. MakeScreen(Pops[4][11],15,
  76. '                 THIS SCREEN WAS NOT READ FROM THAT FILE.');
  77. MakeScreen(Pops[4][12],15,
  78. '                    THIS SCREEN WAS NOT READ FROM THAT FILE.');
  79. MakeScreen(Pops[4][13],15,
  80. '                       THIS SCREEN WAS NOT READ FROM THAT FILE.');
  81. MakeScreen(Pops[4][14],15,
  82. '                          THIS SCREEN WAS NOT READ FROM THAT FILE.');
  83. MakeScreen(Pops[4][15],15,
  84. '                             THIS SCREEN WAS NOT READ FROM THAT FILE.');
  85. MakeScreen(Pops[4][16],15,
  86. '                                THIS SCREEN WAS NOT READ FROM THAT FILE.');
  87. MakeScreen(Pops[4][17],15,
  88. '                                   THIS SCREEN WAS NOT READ FROM THAT FILE.');
  89. MakeScreen(Pops[4][18],15,
  90. '                                      THIS SCREEN WAS NOT READ FROM THAT FILE.');
  91. for N := 19 to 25 do
  92. MakeScreen(Pops[4][N],15,'');
  93. end;
  94. {@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
  95. procedure GrabScreen;    {Here we "grab" a screen from the actual display}
  96. begin
  97.   WRite('Enter a word of 10 letters or less: ');
  98.   ReadLn(your_title);
  99.   ClrScr;
  100.   MakeTitle(your_title,1);
  101.   MakeTitle(your_title,9);
  102.   MakeTitle(your_title,17);
  103.   if color then Pops[5] := Colo
  104.     else Pops[5] := Mono;
  105.   ClrScr;
  106. end;
  107. {@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
  108. procedure MenuDemo;
  109. begin
  110.   for N := 1 to 5 do
  111.     begin
  112.       WriteLn('Now to fill the screen with text, in preparation for a');
  113.       WriteLn('demonstration of a pop-out menu.  Pressing a key saves');
  114.       WriteLn('the current screen & shows the menu.');
  115.       WriteLn;
  116.     end;
  117.  
  118.   repeat
  119.     GetKeys(C,D);
  120.     if ((C = #27) and (D = ';')) then
  121.       begin
  122.         Mono := Pops[5];
  123.         Colo := Pops[5];
  124.       end
  125.     else
  126.       begin
  127.         if color then Pops[5] := Colo
  128.           else Pops[5] := Mono;
  129.         TextColor(black);TextBackground(white);
  130.         GotoXY(20,5);Write ('╔══════════════════════════════╗');
  131.         GotoXY(20,6);Write ('║                              ║');
  132.         GotoXY(20,7);Write ('║  This might well be a menu.  ║');
  133.         GotoXY(20,8);Write ('║  Press F1 to restore the     ║');
  134.         GotoXY(20,9);Write ('║  screen, F2 to end           ║');
  135.         GotoXY(20,10);Write('║                              ║');
  136.         GotoXY(20,11);Write('╚══════════════════════════════╝');
  137.         TextColor(white);TextBackground(black);
  138.      end;
  139.    until (C = #27) and (D = '<');
  140. end;
  141. {@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
  142. begin
  143.   WriteLn('This is a demonstration of directly writing WHOLE SCREENS to the');
  144.   WriteLn('display.  First, a "picture" screen is read from disk in three');
  145.   WriteLn('different colors.  Next a screen is created directly within this');
  146.   WriteLn('program.  Finally, a screen is created on the display and "grabbed"');
  147.   WriteLn('by the program.');
  148.   WriteLn('After all that, you get a demo of a SCREEN menu.');
  149.   WriteLn('Press a key to start it all');
  150.   repeat until keypressed;
  151.   CheckColor;
  152.   GetScreensFromFile;
  153.   CreateAScreen;
  154.   GrabScreen;
  155.   GotoXY(2,2); write('Keep pressing a key for a quick change of screen.');
  156.   Write('<Esc> to go on.');
  157.   N := 0;
  158.   repeat
  159.     GetKeys(C,D);
  160.     N := N + 1;
  161.     Mono := Pops[(N mod 5) + 1];
  162.     Colo := Pops[(N mod 5) + 1];
  163.   until (C = #27) and (D = #0);
  164.   ClrScr;
  165.   MenuDemo;
  166.   ClrScr;
  167. end.